/**
 * 动态保留对象中的指定属性
 * @param {Array} data - 要过滤的数据数组
 * @param {Array} propertiesToKeep - 要保留的属性名称数组
 * @returns {Array} 过滤后的新数组
 */
export function filterObjectProperties(data, propertiesToKeep) {
  return data.map(item => {
    const filteredObject = {};
    propertiesToKeep.forEach(prop => {
      if (item.hasOwnProperty(prop)) {
        filteredObject[prop] = item[prop];
      }
    });
    return filteredObject;
  });
}

/**
 * 生成日历列表
 * @param {Date} currentDate - 当前日期
 * @returns {Array} 6行7列的日历数组
 */
export function generateCalendar(currentDate) {
  // 创建日期对象的副本，避免修改原始日期
  const date = new Date(currentDate);
  // 设置为当月的第一天
  date.setDate(1);
  // 获取当月第一天是星期几 (0-6, 0 是星期日)
  const firstDayOfMonth = date.getDay();
  // 设置为当月的最后一天
  date.setMonth(date.getMonth() + 1);
  date.setDate(0);
  // 获取当月的天数
  const daysInMonth = date.getDate();

  // 计算需要显示的上个月的天数
  const prevMonthDays = firstDayOfMonth;
  // 计算需要显示的下个月的天数
  const nextMonthDays = 42 - (prevMonthDays + daysInMonth); // 6行7列共42格

  // 创建上个月的日期数组
  const prevMonthDates = [];
  if (prevMonthDays > 0) {
    // 获取上个月的最后一天
    const prevMonthLastDate = new Date(currentDate);
    prevMonthLastDate.setDate(0);
    const prevMonthLastDay = prevMonthLastDate.getDate();

    for (let i = prevMonthDays; i > 0; i--) {
        prevMonthDates.push({
          day: prevMonthLastDay - i + 1,
          date: new Date(prevMonthLastDate.getFullYear(), prevMonthLastDate.getMonth(), prevMonthLastDay - i + 1),
          isCurrentMonth: false
        });
      }
  }

  // 创建当月的日期数组
  const currentMonthDates = [];
  for (let i = 1; i <= daysInMonth; i++) {
    currentMonthDates.push({
        day: i,
        date: new Date(date.getFullYear(), date.getMonth(), i),
        isCurrentMonth: true,
        isToday: i === currentDate.getDate() &&
                 date.getMonth() === currentDate.getMonth() &&
                 date.getFullYear() === currentDate.getFullYear()
      });
  }

  // 创建下个月的日期数组
  const nextMonthDates = [];
  for (let i = 1; i <= nextMonthDays; i++) {
    nextMonthDates.push({
        day: i,
        date: new Date(date.getFullYear(), date.getMonth() + 1, i),
        isCurrentMonth: false
      });
  }

  // 合并所有日期
  const allDates = [...prevMonthDates, ...currentMonthDates, ...nextMonthDates];

  // 返回一维数组（6行7列共42个元素）
  return allDates;
}


export function convertToChineseUnit(num) {
  const isNegative = num < 0;
  const absNum = Math.abs(num);

  if (absNum >= 1e8) {
    // 亿级单位保留两位小数
    return (isNegative ? '-' : '') + (absNum / 1e8).toFixed(3) + '亿';
  } else if (absNum >= 1e4) {
    // 万级单位四舍五入取整
    return (isNegative ? '-' : '') + Math.round(absNum / 1e4) + '万';
  } else if (absNum >= 1e3) {
    // 千级单位保留两位小数
    return (isNegative ? '-' : '') + (absNum / 1e3).toFixed(3) + '千';
  }
  if (num){
    return num.toString();
  } else {
    return;
  }

}
